home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 19.zip
/
BS1 part 19
/
how to learn assembler.adf
/
CH7
/
Intuition.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-04-04
|
9KB
|
466 lines
; 7_Intuition.asm
;** Demo-Program for working with Intuition **
movescreen = -162
openscreen = -198
closescreen = -66
openwindow = -204
closewindow = -72
autorequest = -348
SetMenuStrip = -264
ClearMenuStrip = -54
PrintIText = -216
DrawImage = -114
DrawBorder = -108
DisplayBeep = -96
closelibrary = -414
openlib = -408
execbase = 4
GetMsg = -372
joy2 = $dff0c
fire = $bfe001
;!!! when > 500KB !!!
;org $40000
;load $40000
; or use AssemPro to place in CHIP RAM
;!!!!!!!!!!!!!!!!!!!!
run:
bsr openint
bsr scropen
bsr windopen
bsr setmenu
bsr print
lea border,a1
move #22,d0
move #30,d1
bsr borderdraw
bsr draw
bsr request
loop:
move.l execbase,a6
move.l windowhd,a0
move.l 86(a0),a0 ;User-Port
jsr GetMsg(a6)
tst.l d0
beq loop ;no event Ereignis
move.l d0,a0
move.l $16(a0),msg ;Event: LO=Item, HI=Event
move.l msg,d6 ;to test
move.l d6,d7
lsr #8,d7
lsr #3,d7 ;Sub menu point in D7
clr.l d5
roxr #1,d6
roxl #1,d5 ;Menu number in D5
and.l #$7f,d6
cmp #$7f,d6 ;no menu point ?
beq loop ;no: continue
lsr #4,d6 ;Menu point in D6
cmp #1,d6 ;Point 2 ?
bne no1
move.l intbase,a6
move.l screenhd,a0
jsr DisplayBeep(a6)
no1:
cmp #0,d6
bne loop
ende:
bsr clearmenu
bsr windclose
bsr scrclose
bsr closeint
rts
openint:
move.l execbase,a6
lea intname,a1
jsr openlib(a6)
move.l d0,intbase
rts
closeint:
move.l execbase,a6
move.l intbase,a1
jsr closelibrary(a6)
rts
scropen:
move.l intbase,a6
lea screen_defs,a0
jsr openscreen(a6)
move.l d0,screenhd
rts
scrclose:
move.l intbase,a6
move.l screenhd,a0
jsr closescreen(a6)
rts
scrmove:
move.l intbase,a6
move.l screenhd,a0
jsr movescreen(a6)
rts
windopen:
move.l intbase,a6
lea windowdef,a0
jsr openwindow(a6)
move.l d0,windowhd
rts
windclose:
move.l intbase,a6
move.l windowhd,a0
jsr closewindow(a6)
rts
request:
move.l windowhd,a0
lea btext,a1
lea ltext,a2
lea rtext,a3
move.l #0,d0
move.l #0,d1
move.l #180,d2
move.l #80,d3
move.l intbase,a6
jsr autorequest(a6)
rts
setmenu:
lea mentab,a0 ;Pointer to text pointer in A0
lea menu,a1 ;Pointer to Menu field in A1
move #10,d1 ;Menu position=10
menuloop:
clr.l d2 ;Menu point-Y =0
move.l a1,a2 ;Save pointer
tst.l (a0)
beq setmenu1 ;End
clr.l (a1)+
move d1,(a1)+
add.l #70,d1
move.l #50,(a1)+
move.l #$a0001,(a1)+
move.l (a0)+,(a1)+ ;Menu title
lea 12(a1),a3
move.l a3,(a1)+ ;Menu point
clr.l (a1)+
clr.l (a1)+
itemloop:
tst.l (a0) ;last one ?
beq menuend ;yes
lea 54(a1),a3
move.l a3,(a1)+ ;Pointer to next Point
move.l d2,(a1)+ ;X/Y
add #10,d2
move.l #$5a000a,(a1)+ ;width /height
move #$52,(a1)+
clr.l (a1)+
lea 16(a1),a3
move.l a3,(a1)+ ;Text structor-pointer
clr.l (a1)+
clr.l (a1)+
clr.l (a1)+
move #$1,(a1)+ ;Text-Structor set
clr (a1)+
move.l #$50003,(a1)+
clr.l (a1)+
move.l (a0)+,(a1)+ ;Text-pointer
clr.l (a1)+
bra itemloop ;next Point...
menuend:
clr.l -54(a1)
tst.l (a0)+
tst.l (a0) ;nstill in Menu ?
beq setmenu1 ;no: ready
move.l a1,(a2) ;Pointer to next menu
bra menuloop ;and continue
setmenu1:
move.l intbase,a6
move.l windowhd,a0
lea menu,a1
jsr SetMenuStrip(a6)
rts
clearmenu:
move.l intbase,a6
move.l windowhd,a0
jsr ClearMenuStrip(a6)
rts
print:
move.l intbase,a6
move.l windowhd,a0
move.l 50(a0),a0
lea ggtext,a1
move.l #30,d0 ;X
move.l #16,d1 ;Y
jsr PrintIText(a6)
rts
draw:
move.l intbase,a6
move.l windowhd,a0
move.l 50(a0),a0
lea image,a1
move.l #200,d0
move.l #100,d1
jsr DrawImage(a6)
rts
borderdraw:
move.l intbase,a6
move.l windowhd,a0
move.l 50(a0),a0
jsr DrawBorder(a6)
rts
screen_defs:
dc.w 0,0
dc.w 640,200
dc.w 4
dc.b 0
dc.b 1
dc.w $800
dc.w 15
dc.l 0
dc.l titel
dc.l 0
dc.l 0
windowdef:
dc.w 10,20
dc.w 300,150
dc.b 0,1
dc.l $300
dc.l $100f
dc.l gadget
dc.l 0
dc.l windname
screenhd: dc.l 0
dc.l 0
dc.w 200,40,600,200
dc.w $f
btext:
dc.b 3,3
dc.b 0
align dc.w 10,10
dc.l 0
dc.l bodytxt
dc.l 0
bodytxt: dc.b "Requester-Text",0
align
ltext:
dc.b 3,1
dc.b 0
align dc.w 5,3
dc.l 0
dc.l lefttext
dc.l 0
lefttext: dc.b "left",0
align
rtext:
dc.b 0,1
dc.b 0
align dc.w 5,3
dc.l 0
dc.l righttext
dc.l 0
righttext: dc.b "right",0
align
titel: dc.b "User Screen",0
windname: dc.b "Window-Title",0
align windowhd: dc.l 0
intbase: dc.l 0
intname: dc.b "intuition.library",0
align msg: dc.l 0
mentab:
dc.l menu1
dc.l mp11,mp12,mp13,mp14,mp15,mp16,mp17,mp18,mp19,0
dc.l menu2
dc.l mp21,mp22,mp23,0
dc.l menu3
dc.l mp31,mp32,0
dc.l menu4,mp41,0
dc.l 0
menu1: dc.b "Menu 1",0
mp11: dc.b "Point 11",0
mp12: dc.b "Point 12",0
mp13: dc.b "Point 13",0
mp14: dc.b "Point 14",0
mp15: dc.b "Point 15",0
mp16: dc.b "Point 16",0
mp17: dc.b "Point 17",0
mp18: dc.b "Point 18",0
mp19: dc.b "Point 19",0
menu2: dc.b "Menu 2",0
mp21: dc.b "End !",0
mp22: dc.b "Beep",0
mp23: dc.b "Point 23",0
menu3: dc.b "Menu 3",0
mp31: dc.b "Point 31",0
mp32: dc.b "Point 32",0
menu4: dc.b "Menu 4",0
mp41: dc.b "Point 41",0
align
gadget:
dc.l gadget1
dc.w 20,80,80,10
dc.w 0
dc.w $2 ;Activation, $802 for LongInt
dc.w 4
dc.l border
dc.l 0
dc.l 0
dc.l 0
dc.l strinfo
dc.w 2
dc.l 0
border:
dc.w 0,0
dc.b 1,0,0
dc.b 5 ;XY-Pair
dc.l koord
dc.l 0
koord:
dc.w -2,-2,80,-2,80,9,-2,9,-2,-2
strinfo:
dc.l strpuffer
dc.l undo
dc.w 0 ;Cursor-Position
dc.w 10 ;max. Char
dc.w 0
dc.w 0,0,0,0,0
dc.l 0,0,0
strpuffer: dc.b "Hello !",0,0,0
undo: dc.l 0,0,0
align
gadget1:
dc.l gadget2 ;more Gadget
dc.w 40,50,32,13
dc.w $6 ;Flags: invert
dc.w $103 ;Activate
dc.w 1 ;Gadget-Type
dc.l image ;Gadget-Image
dc.l image2 ;Select-Gadget
dc.l ggtext ;Gadget-Text
dc.l 0 ;no Exclude
dc.l 0 ;special Info
dc.w 1 ;ID
dc.l 0 ;UserData
ggtext:
dc.b 1,0,1
align dc.w -8,14
dc.l 0
dc.l swtext
dc.l 0
swtext: dc.b "Switch",0
align
image:
dc.w 0,0
dc.w 32,13
dc.w 1
dc.l imgdata
dc.b 2,1
dc.l 0
image2:
dc.w 0,0
dc.w 32,13
dc.w 1
dc.l imgdata2
dc.b 2,1
dc.l 0
imgdata:
dc.l 0
dc.l %00000000011100000000000000000000
dc.l %00000000111110000011101001000000
dc.l %00000000111110000010101101000000
dc.l %00000000011110000010101011000000
dc.l %00000000000111000011101001000000
dc.l %00000000000011100000000000000000
dc.l %00000000000001110000000000000000
dc.l %00000000000111111111100000000000
dc.l %00000000001111111111110000000000
dc.l %00000000001111111111110000000000
dc.l %00000000000110000001100000000000
dc.l 0
imgdata2:
dc.l 0
dc.l %00000000000000000000111000000000
dc.l %00011101110111000001111100000000
dc.l %00010101000100000001111100000000
dc.l %00010101100110000001111000000000
dc.l %00011101000100000011100000000000
dc.l %00000000000000000111000000000000
dc.l %00000000000000001110000000000000
dc.l %00000000000111111111100000000000
dc.l %00000000001111111111110000000000
dc.l %00000000001111111111110000000000
dc.l %00000000000110000001100000000000
dc.l 0
gadget2:
dc.l 0
dc.w 150,30,100,50
dc.w 5
dc.w 2
dc.w 3 ;Prop. Gadget
dc.l mover ;border
dc.l 0,0,0
dc.l specinfo
dc.w 3
dc.l 0
specinfo:
dc.w 6 ;Flags: freehoriz
dc.w 0,0
dc.w $ffff/10,$ffff/5
dc.w 0,0,0,0,0,0
mover:
dc.w 0,0,16,7
dc.w 1
dc.l moverdata
dc.b 1,0
dc.l 0
moverdata:
dc.w %0111111111111110
dc.w %0101111111111010
dc.w %0101011111101010
dc.w %0101010110101010
dc.w %0101011111101010
dc.w %0101111111111010
dc.w %0111111111111110
menu: blk.w 500
end